/**
 * http 请求
 * @type {{get: Http.get, post: Http.post, request: Http.request}}
 */
var Http = {
    /**
     * 异步get请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     */
    get: function (url, params, successCallBack, errorCallBack, resposneDataType) {
        var type = "GET";
        Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType);
    },

    /**
     * 同步get请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     */
    getSync: function (url, params, successCallBack, errorCallBack, resposneDataType) {
        var type = "GET";
        Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType, false);
    },

    /**
     * 异步post请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     * @param isUseRequestBody
     *            是否使用requestBody形式传递参数
     */
    post: function (url, params, successCallBack, errorCallBack, resposneDataType, isUseRequestBody) {
        var type = "POST";
        if (isUseRequestBody == true) {
            var useRequestBody = "useRequestBody=true";
            if (url.indexOf(useRequestBody) == -1) {
                url = url + (url.indexOf("?") != -1 ? "&" : "?") + useRequestBody;
            }
            var loginAdminUserIdParam = "loginAdminUserId=";
            if (url.indexOf(loginAdminUserIdParam) == -1) {
                url = url + (url.indexOf("?") != -1 ? "&" : "?") + loginAdminUserIdParam + loginAdminUserId;
            }
            Http.request(url, JSON.stringify(params), successCallBack, errorCallBack, type, resposneDataType, true, "application/json");
        } else {
            Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType, true);
        }
    },
    /**
     * 同步post请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     * @param isUseRequestBody
     *            是否使用requestBody形式传递参数
     */
    postSync: function (url, params, successCallBack, errorCallBack, resposneDataType, isUseRequestBody) {
        var type = "POST";
        if (isUseRequestBody == true) {
            var useRequestBody = "useRequestBody=true";
            if (url.indexOf(useRequestBody) == -1) {
                url = url + (url.indexOf("?") != -1 ? "&" : "?") + useRequestBody;
            }
            var loginAdminUserIdParam = "loginAdminUserId=";
            if (url.indexOf(loginAdminUserIdParam) == -1) {
                url = url + (url.indexOf("?") != -1 ? "&" : "?") + loginAdminUserIdParam + loginAdminUserId;
            }
            Http.request(url, JSON.stringify(params), successCallBack, errorCallBack, type, resposneDataType, false, "application/json");
        } else {
            Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType, false);
        }
    },
    /**
     * 异步get请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     */
    delete: function (url, params, successCallBack, errorCallBack, resposneDataType) {
        var type = "DELETE";
        Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType);
    },
    /**
     * 同步get请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     */
    deleteSync: function (url, params, successCallBack, errorCallBack, resposneDataType) {
        var type = "DELETE";
        Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType, false);
    },
    /**
     * 异步get请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     */
    put: function (url, params, successCallBack, errorCallBack, resposneDataType) {
        var type = "PUT";
        Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType);
    },
    /**
     * 同步get请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param resposneDataType
     *            服务器端数据响应格式
     */
    putSync: function (url, params, successCallBack, errorCallBack, resposneDataType) {
        var type = "PUT";
        Http.request(url, params, successCallBack, errorCallBack, type, resposneDataType, false);
    },
    /**
     * ajax请求
     * @param url
     *            请求的URL
     * @param successCallBack
     *            请求成功回调函数
     * @param errorCallBack
     *            请求失败回调函数
     * @param type
     *            请求方式
     * @param resposneDataType
     *            服务器端数据响应格式
     * @param async 是否同步
     * @param contentType 发送信息至服务器时内容编码类型
     */
    request: function (url, params, successCallBack, errorCallBack, type, resposneDataType, async, contentType) {
        if (!resposneDataType) {
            resposneDataType = "html";
        }
        if (!params) {
            params = {};
        }
        if (async) {
            async = true;//false 将使用同步的Ajax请求
        }
        if (!contentType) {
            contentType = "application/x-www-form-urlencoded";
        }
        if (url.indexOf("useRequestBody=true") == -1) {//不使用requestBody的时候，自动附加登陆者Id参数
            if ($.isArray(params)) {
                var isExistsLoginAdminUserId = false;
                params.map(function (item) {
                    if (item.name == "loginAdminUserId") {
                        isExistsLoginAdminUserId = true;
                    }
                });
                if (!isExistsLoginAdminUserId) {
                    params.push({name: "loginAdminUserId", value: loginAdminUserId});
                }
            } else {
                if (!params.loginAdminUserId) {
                    params.loginAdminUserId = loginAdminUserId;
                }
            }
        } else if (contentType && contentType.toLowerCase().indexOf("application/json") != -1) {//使用requestBody的时候自动附加登陆者Id参数
            if (url.indexOf("loginAdminUserId=") == -1) {
                url = url + (url.indexOf("?") == -1 ? "?" : "&") + "loginAdminUserId=" + loginAdminUserId;
            }
        }
        $.ajax({
            type: type,
            url: url,
            contentType: contentType,
            async: async,
            cache: false,
            data: params,
            dataType: resposneDataType,
            beforeSend: function () {
                $(".loading-ajax").removeClass("ajaxLoaded").addClass("ajaxLoading");
            },
            success: function (data) {
                if (typeof successCallBack === "function") {
                    successCallBack(data);
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                if (typeof errorCallBack === "function") {
                    errorCallBack(XMLHttpRequest, textStatus, errorThrown);
                }
            },
            complete: function (XMLHttpRequest) {
                $(".loading-ajax").removeClass("ajaxLoading").addClass("ajaxLoaded");
            }
        });
    }
}